function $( e ) 
{
    if( typeof e == 'string' )
        e = document.getElementById( e );
    return e
};

function collect( a, f ) 
{
    var n=[];
    for( var i = 0; i < a.length; i++ ) 
    {
        var v = f( a[i] );
        if( v != null )
            n.push(v)
    }
    return n
};

ajax = {};

ajax.x = function()
{
    try
    {
        return new ActiveXObject('Msxml2.XMLHTTP')
    }
    catch( e )
    {
        try
        {
            return new ActiveXObject('Microsoft.XMLHTTP')
        }
        catch( e )
        {
            return new XMLHttpRequest()
        }
    }
};

ajax.serialize = function( f )
{
    var g = function( n )
    {
        return f.getElementsByTagName( n )
    };
    
    var nv = function( e )
    {
        if( e.name )
            return encodeURIComponent(e.name) + '=' + encodeURIComponent( e.value );
        else 
            return ''
    };
    
    var i = collect( g('input'), function( i ){ if( ( i.type != 'radio' && i.type != 'checkbox' ) || i.checked ) return nv( i ) });
    var s = collect( g('select'), nv );
    var t = collect( g('textarea'), nv );
    return i.concat(s).concat(t).join('&');
};

ajax.send = function( u, f, m, a )
{
    var x = ajax.x();
    x.open( m, u, true );
    x.onreadystatechange = function()
    {
        if( x.readyState == 4 )
            f( x.responseText )
    };
    if( m == 'POST' )
        x.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
    x.send(a)
};

ajax.get = function( url, func )
{
    ajax.send( url, func, 'GET' )
};

ajax.gets = function( url )
{
    var x = ajax.x();
    x.open( 'GET', url, false );
    x.send(null);
    return x.responseText
};

ajax.post = function( url, func, args )
{
    ajax.send( url, func, 'POST', args )
};

ajax.update = function( url, elm )
{
    var e = $(elm);
    var f = function(r)
    {
        e.innerHTML = r
    };
    ajax.get( url, f ) 
};

ajax.submit = function( url, elm, frm )
{
    var e = $(elm);
    var f = function(r)
    {
        e.innerHTML = r
    };
    ajax.post( url, f, ajax.serialize(frm) )
};
